3
תגובות
אני מתכנת משחק דפדפן. יש לי טבלת יוזרים וטבלת נשקים.
דוגמא לשורה מטבלת הנשקים (יש עוד טורים אבל זה העקרוניים למקרה שלי):
וכך הלאה כי ישנם הרבה סוגים של נשקים.
אני רוצה עכשיו לעשות אופציה שהיוזרים יקנו נשקים. השאלה היא מה הדרך הכי טובה לעשות את זה? (אין אופציה למכור חזרה את הנשקים, כשקונים זה לתמיד)
חשבתי לפתוח טבלה חדשה בשם 'weapons_of_users' ולעשות אותה כך:
מה דעתכם?
זה אומר שכל פעם שאצטרך לחשב את כוח השחקן אצטרך לעבור על כלל הטבלה, לחשב כמה כמות יש מכל נשק ואז להכפיל(כמות נשק * כוח הנשק).
נ.ב. אשמח מאוד לעזרה איך כותבים את השאילתה הזאת?
אסביר איך היא צריכה לפעול:
צריך לחשב כמות של כל נשק(לפי 'weapon_id') מהטבלה `weapons_of_users' של יוזר מסויים (where `user_id` = 1)
ולאחר מכן להכפיל את כמות הנשק בכוח שלו (מהטבלה 'weapons')
נ.ב. אל תציעו לעשות טור בטבלה יוזרס בשם 'power' כיוון ובמקרה שאני משנה את כוח הנשק(אופציה של אדמין מן הסתם), שיהיה אפקטיבי לכל היוזרים...
דוגמא לשורה מטבלת הנשקים (יש עוד טורים אבל זה העקרוניים למקרה שלי):
id 1
name 'Good Weapon'
power '20'
name 'Good Weapon'
power '20'
וכך הלאה כי ישנם הרבה סוגים של נשקים.
אני רוצה עכשיו לעשות אופציה שהיוזרים יקנו נשקים. השאלה היא מה הדרך הכי טובה לעשות את זה? (אין אופציה למכור חזרה את הנשקים, כשקונים זה לתמיד)
חשבתי לפתוח טבלה חדשה בשם 'weapons_of_users' ולעשות אותה כך:
id 1
user_id 1
weapon_id 3
amount 20
user_id 1
weapon_id 3
amount 20
מה דעתכם?
זה אומר שכל פעם שאצטרך לחשב את כוח השחקן אצטרך לעבור על כלל הטבלה, לחשב כמה כמות יש מכל נשק ואז להכפיל(כמות נשק * כוח הנשק).
נ.ב. אשמח מאוד לעזרה איך כותבים את השאילתה הזאת?
אסביר איך היא צריכה לפעול:
צריך לחשב כמות של כל נשק(לפי 'weapon_id') מהטבלה `weapons_of_users' של יוזר מסויים (where `user_id` = 1)
ולאחר מכן להכפיל את כמות הנשק בכוח שלו (מהטבלה 'weapons')
נ.ב. אל תציעו לעשות טור בטבלה יוזרס בשם 'power' כיוון ובמקרה שאני משנה את כוח הנשק(אופציה של אדמין מן הסתם), שיהיה אפקטיבי לכל היוזרים...
3 תשובות
א. אתה עושה את זה נכון
ב. השאילת שלך תהיה כזו
select sum(weapons.power * weapons_of_users.amount)
from weapons_of_users
left join weapons on weapons_of_users.weaponid = weapons.id
where weapons_of_users.userid = 1
from weapons_of_users
left join weapons on weapons_of_users.weaponid = weapons.id
where weapons_of_users.userid = 1
ג. כדי שזה יעבוד מהר - אל תשכח להוסיף אינדקסים על השדות:
weapons.id, weapons_of_users.weaponid, weapons_of_users.userid
תודה רבה לך אלכס. אני יבדוק עוד מעט עם השאילתה עובדת.
נ.ב. יש מצב שאתה מסביר קצת על אינדקסים ולמה זה יהיה מהר יותר?
עוד שאלה, 2 unique זה אפשרי? (שתמיד גם username וגם email יהיה unique)